package org.eae.eldf.service.module.impl;

import java.util.Date;
import org.eae.eldf.dao.module.IModuleRoleDao;
import org.eae.eldf.dao.module.impl.ModuleRoleDaoImpl;
import org.eae.eldf.dao.portal.IPortalCompanyRoleDao;
import org.eae.eldf.dao.portal.impl.PortalCompanyRoleDaoImpl;
import org.eae.eldf.dto.module.ModuleRoleDto;
import org.eae.eldf.dto.module.ModuleRoleQueryDto;
import org.eae.eldf.entity.module.ModuleRole;
import org.eae.eldf.entity.portal.PortalCompanyRole;
import org.eae.eldf.framework.pager.Pagination;
import org.eae.eldf.framework.persistence.Criteria;
import org.eae.eldf.framework.service.BaseServiceImpl;
import org.eae.eldf.framework.spring.SpringSecurityUtils;
import org.eae.eldf.service.module.ModuleRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class ModuleRoleServiceImpl extends BaseServiceImpl<ModuleRole>
implements ModuleRoleService{
	private IModuleRoleDao moduleRoleDao ;
	
	private IPortalCompanyRoleDao portalCompanyRoleDao;
	
	@Autowired
	public void setModuleRoleDao(ModuleRoleDaoImpl moduleRoleDao) {
		this.moduleRoleDao = moduleRoleDao;
		this.dao = moduleRoleDao;
	}
	
	@Autowired
	public void setPortalCompanyRoleDao(PortalCompanyRoleDaoImpl portalCompanyRoleDao) {
		this.portalCompanyRoleDao = portalCompanyRoleDao;
	}

	/*private ObjectRedisTemplate objectRedisTemplate;
	
	@Autowired
	public void setObjectRedisTemplate(ObjectRedisTemplate objectRedisTemplate) {
		this.objectRedisTemplate = objectRedisTemplate;
	}*/


	@Override
	public Pagination<ModuleRoleDto> pageModuleRoleList(Pagination<ModuleRoleDto> pager,ModuleRoleQueryDto moduleRoleQueryDto) {
		pager= moduleRoleDao.pageModuleRoleList(pager, moduleRoleQueryDto);
		return pager;
	}

	@Override
	public void deleteByComRoleId(Long id){
		//先删除角色的权限
		//		moduleRoleDao.delete(Criteria.create(SysRolePurview.class).where("modulePurview", new Object[]{id}));
		//删除用户对应的角色
		ModuleRole r = moduleRoleDao.get(ModuleRole.class, id);
		moduleRoleDao.update(Criteria.create(ModuleRole.class).set("isDelete", 1).where("moduleRoleId", new Object[]{id}));
		
		portalCompanyRoleDao.update(Criteria.create(PortalCompanyRole.class).set("isDelete", 1)
				.where("companyCode", new Object[]{"system"})
				.and("roleName", new Object[]{r.getRoleName()}));
	}

	@Override
	public ModuleRole findById(Long id) {
		return moduleRoleDao.get(ModuleRole.class, id);
	}


	/**
	 * {@inheritDoc} 
	 * overridden:
	 * @Date        :      2016-6-27
	 * @see org.eae.eldf.service.module.ModuleRoleService#insertModuleRole(org.eae.eldf.entity.module.ModuleRole)
	**/
	@Override
	public void insertModuleRole(ModuleRole role) {
		role.setIsDelete(0);
		moduleRoleDao.insert(role);
		
		//新增企业默认模块角色
//		PortalCompanyRole cr = new PortalCompanyRole();
//		cr.setCompanyCode("system");
//		cr.setCreateTime(new Date());
//		cr.setCreateUser(SpringSecurityUtils.getCurrentUserName());
//		cr.setIsDefaultRole(role.getIsDefaultRole());
//		cr.setModuleInfoId(role.getModuleInfoId());
//		cr.setRoleName(role.getRoleName());
//		cr.setRoleRemark(role.getRoleDesc());
//		cr.setIsDelete(0);
//		portalCompanyRoleDao.insert(cr);
		
	}
	

	/**
	 * {@inheritDoc} 
	 * overridden:
	 * @Date        :      2016-6-27
	 * @see org.eae.eldf.service.module.ModuleRoleService#updateModuleRole(org.eae.eldf.entity.module.ModuleRole)
	**/
	@Override
	public void updateModuleRole(ModuleRole role) {
	//	ModuleRole m = moduleRoleDao.get(ModuleRole.class, role.getModuleRoleId());
		moduleRoleDao.update(Criteria.create(ModuleRole.class)
				.set("roleName", role.getRoleName())
				.set("roleDesc", role.getRoleDesc())
				.set("moduleInfoId", role.getModuleInfoId())
				.set("lastUpdateTime", new Date())
				.set("isDefaultRole", role.getIsDefaultRole())
				.set("lastUpdateUser", SpringSecurityUtils.getCurrentUserName())
				.where("moduleRoleId",new Object[]{role.getModuleRoleId()}));
		
//		portalCompanyRoleDao.update(Criteria.create(PortalCompanyRole.class)
//				.set("roleName", role.getRoleName())
//				.set("roleRemark", role.getRoleDesc())
//				.set("lastUpdateTime", new Date())
//				.set("isDefaultRole", role.getIsDefaultRole())
//				.set("lastUpdateUser", SpringSecurityUtils.getCurrentUserName())
//				.where("companyCode", new Object[]{"system"})
//				.and("roleName", new Object[]{m.getRoleName()})
//				);
	}

}
